import * as fs from 'fs';
import { IPlugin } from "./video_plugin";
import { IPluginManager, IInstallPluginConfig, IInstallPluginResult } from "./def";
class PluginManager implements IPluginManager {

    private _plugins: IPlugin[] = [];


    getPlugins(): IPlugin[] {
        return this._plugins;
    }
    /**
        * 初始化插件管理器，从文件系统加载所有插件
        * 读取插件目录中的所有.js文件并创建插件实例
        * @throws 如果插件初始化失败则抛出异常
        */
    async setup() {
        // let plugin = await import("./plugins/hero_source");
        // let plugin2 = await import("./plugins/iysdq_source");

        // this._plugins.push(new IPlugin(()=> new plugin.HeroSource(), "./plugins/hero_source.ts"));
        // this._plugins.push(new IPlugin(()=> new plugin2.IysdqSource(), "./plugins/iysdq_source.ts"));
        // const loadFile = new Promise((resolve, reject) => {
        //     fs.readFile("./sixvdy.js", (err, file) => {
        //         if (err) {
        //             reject(err);
        //         } else {
        //             resolve(file.toString());
        //         }
        //     });
        // });
        // const plugin1 = await loadFile;
        this._plugins.push(new IPlugin(()=>require('./plugins/yndy.js'), "./plugins/yndy.ts"));
        this._plugins.push(new IPlugin(()=>require('./plugins/sixvdy.js'), "./plugins/sixvdy.ts"));
        this._plugins.push(new IPlugin(()=>require('./plugins/hero_source.js'), "./plugins/hero_source.ts"));
        this._plugins.push(new IPlugin(()=>require('./plugins/iysdq_source.js'), "./plugins/iysdq_source.ts"));
       

    }
    /**
     * 从本地文件安装插件
     * @param pluginPath - 插件文件路径
     * @param config - 安装配置选项
     * @param config.notCheckVersion - 为true时跳过版本检查
     * @param config.useExpoFs - 为true时使用Expo文件系统代替React Native的文件系统
     * @returns 安装结果，包含成功状态和相关信息
     */
    async installPluginFromLocalFile(
        pluginPath: string,
        config?: IInstallPluginConfig & {
            useExpoFs?: boolean
        },
    ): Promise<IInstallPluginResult> {

        //根据给定的文件地址，获取js文件内容

        return {} as IInstallPluginResult;
    }
    /**
 * 从URL安装插件
 * @param url - 下载插件的URL
 * @param config - 安装配置选项
 * @param config.notCheckVersion - 为true时跳过版本检查
 * @returns 安装结果，包含成功状态和相关信息
 */
    async installPluginFromUrl(
        url: string,
        config?: IInstallPluginConfig,
    ) {
        return {} as IInstallPluginResult;
    }


    /**
     * 使用插件的源URL更新插件
     * @param plugin - 要更新的插件实例
     * @throws 如果插件没有源URL或更新失败时抛出错误
     */
    async updatePlugin(plugin: IPlugin) {

    }
}

const pluginManager = new PluginManager();

export {
    pluginManager
} 